#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>
#include <pthread.h>
#include <stdlib.h>

// int sqr(int num)
// {
//     sleep(1);
//     return num * num;
// }

void *thread_sqr(void *arg)
{
    int num = *(int *)arg;
    sleep(1);
    int *sqr = malloc(sizeof(int));
    *sqr = num * num;
    return sqr;
}

int main(void)
{
    struct timeval start, end;
    int nums[5] = {1, 2, 3, 4, 5};
    int sqrs[5] = {0};
    pthread_t threads[5];
    gettimeofday(&start, NULL);
    // 创建5个线程，每个线程执行thread_sqr函数，参数为nums数组中的元素
    for (int i = 0; i < 5; i++)
    {
        pthread_create(&threads[i], NULL, thread_sqr, &nums[i]);
    }
    // 遍历线程数组
    for (int i = 0; i < 5; i++)
    {
        // 定义一个指针变量sqr
        void *sqr;
        // 等待线程i结束，并将线程i的返回值存储在sqr中
        pthread_join(threads[i], &sqr);
        // 将sqr中的值转换为int类型，并存储在sqrs数组中
        sqrs[i] = *(int *)sqr;
        // 释放动态分配的内存空间
        free(sqr);
    }
    gettimeofday(&end, NULL);
    printf("time: %ld\n", end.tv_sec - start.tv_sec);
    int sum = 0;
    for (int i = 0; i < 5; i++)
    {
        sum += sqrs[i];
    }
    printf("sum = %d\n", sum);
    return 0;
}